#include<iostream>
#include<string>
#include<cstdio>
#include<string.h>
#include<errno.h>
#include<cstdlib>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

int main()
{

    pid_t id = fork();
    if(id < 0)
    {
        printf("errno : %d , errstring : %s\n",errno, strerror(errno));
        return errno;
    }
    else if(id == 0)
    {
        int cnt = 5;
        while(cnt)
        {
            printf("子进程运行中，pid :%d\n",getpid());
            cnt--;
            sleep(1);
        }
        exit(1);
    }
    else
    {
        sleep(10);
        int status = 0;
        pid_t rid = waitpid(-1, &status ,0); //这样写和wait效果是一样的
        if(id > 0)
        {
            printf("wait sub process sucess, rid : %d\n, status code: %d, exit signal : %d\n ",rid, (status>>8)&0xFF,status&0x7F);
        }
        while(true)
        {
            printf("我是父进程： pid: %d\n",getpid());
            sleep(1);
        }
    }
//
//    printf("进程运行结束！");
//    sleep(2);
//    _exit(5);
//    sleep(2);

   //for(int i = 0; i < 200; i++)
   //{
   //    std::cout<<"code : "<<i<<" ,errstring: "<<strerror(i)<<std::endl;
   //}
 //   printf("before: error : %d, errstring: %s\n", errno,strerror(errno));

 //   FILE* fp = fopen("./log.txt","r");
 //   if(fp == nullptr)
 //   {
 //       printf("after: errno : %d,errstring: %s\n",errno, strerror(errno));
 //   }
 //   //std::cout << "hello linux" << std::endl;
     return 10;
}
